package edu.se.jai.lesson03guess1.model;

import lombok.Data;

/**
 * 操作结果封装类
 * 用于替代异常处理，通过返回值表示操作成功或失败
 */
@Data
public class Result<T> {
    
    /**
     * 操作是否成功
     */
    private boolean success;
    
    /**
     * 错误消息（失败时使用）
     */
    private String errorMessage;
    
    /**
     * 成功时的数据
     */
    private T data;
    
    /**
     * 私有构造函数
     */
    private Result() {}
    
    /**
     * 创建成功结果
     */
    public static <T> Result<T> success(T data) {
        Result<T> result = new Result<>();
        result.success = true;
        result.data = data;
        return result;
    }
    
    /**
     * 创建成功结果（无数据）
     */
    public static <T> Result<T> success() {
        Result<T> result = new Result<>();
        result.success = true;
        return result;
    }
    
    /**
     * 创建失败结果
     */
    public static <T> Result<T> failure(String errorMessage) {
        Result<T> result = new Result<>();
        result.success = false;
        result.errorMessage = errorMessage;
        return result;
    }
    
    /**
     * 检查是否成功
     */
    public boolean isSuccess() {
        return success;
    }
    
    /**
     * 检查是否失败
     */
    public boolean isFailure() {
        return !success;
    }
    
    /**
     * 获取数据，如果失败则返回null
     */
    public T getData() {
        return data;
    }
    
    /**
     * 获取错误消息，如果成功则返回null
     */
    public String getErrorMessage() {
        return errorMessage;
    }
}
